<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type">
    <title>ch01-02</title>
    <link href="css/style.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" href="thumbnailviewer.css" type="text/css">
    <script src="thumbnailviewer.js" type="text/javascript">

/***********************************************
* Image Thumbnail Viewer Script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/

</script> </head>
  <body>
    <div class="os1">1.2 视频常识 </div>
    <p> 本节简略介绍颜色、图像和视频技术，先介绍颜色空间，然后简要描述图像压缩编码的技术，接着介绍视频及其编码技术，最后提一下视频文件格式。 </p>
    <div class="os2">1.2.1 颜色</div>
    <p> 我们先来看到一道彩虹： </p>
    <center><img src="images/ch01/ch01-02-01.jpg" width="600"></center>
    颜色（Color）的根源其实都是光谱，不同波长的光呈现不同的颜色，人和动物都进化出了眼睛感知周围的光谱，不同物体呈现不同光谱，就是生活中看到的五颜六色。
    白光透过三棱镜
    之后也会呈现彩虹，是因为不同波长光折射位置不同，所以将混合的白光分离成了单独的颜色光线。人眼对红色（Red）、绿色（Green）、蓝色（Blue）三种颜
    色感受度最强，因为肉眼的椎状体对于这三种光线频率所能感受的带宽最大，也能够独立刺激这三种颜色的受光体，因此这三色被视为原色。显示器也是基于RGB三原色进
    行发光，RGB三原色根据不同能量配比，能形成其他各种颜色的效果，比如下图：<br>
    <center><img src="images/ch01/ch01-02-02.jpg"></center>
    <br>
    红蓝等比例混合得到紫色，红绿等比例混合得到黄色，蓝绿等比例混合得到青色，而红绿蓝三色等比例混合得到白色。如果三原色的配比不同，就能产生更多的颜色。RGB
    三原色的各种配比数值就形成了 RGB 颜色空间。RGB 颜色空间是最能直观感受的，当然在科学上，还有其他颜色空间，视频压缩最常用的是 YUV 空间，也叫
    YCbCr 空间。<br>
    Y是指亮度信息，U（Cb 蓝色色度）和V（Cr 红色色度）是指色度信息，YUV 空间和 RGB 空间计算公式为：（各变量取值范围0~255）<br>
    <br>
    Y =&nbsp; 0.299*R + 0.587*G + 0.114*B ;<br>
    U = -0.169*R - 0.331*G + 0.5&nbsp; *B ;<br>
    V =&nbsp; 0.5&nbsp; *R - 0.419*G - 0.081*B 。<br>
    <br>
    反过来转换：<br>
    <br>
    R = Y + 1.4075 * (V-128) ;&nbsp; <br>
    G = Y - 0.3455 * (U-128) - 0.7169*(V-128) ;&nbsp; <br>
    B = Y + 1.779 * (U-128) 。&nbsp; <br>
    <br>
    换算公式参考：<a href="https://www.cnblogs.com/luoyinjie/p/7219319.html" target="new">
      https://www.cnblogs.com/luoyinjie/p/7219319.html </a> <br>
    <br>
    YUV
    空间是利用人眼对亮度信息敏感，而对色度信息相对不敏感的特点，通常将色度信息进行压缩存储，节省空间。YUV有多种压缩比例，亮度信息都是不压缩的，主要压缩色度信息，
    常见压缩比为 4:4:4 、4:2:2 、4:1:1 、4:2:0 。如下图所示：<br>
    <center><img src="images/ch01/ch01-02-03.png"></center>
    YUV444 就是完全不压缩，U、V信息完全保留下来。<br>
    YUV422 是每 2 个像素点共用一组 UV 信息。<br>
    YUV411 是每 4 个像素点共用一组 UV 信息。<br>
    YUV420 是也是每 4 个像素点共用一组 UV 信息，但是将
    U、V分行存储，第一行存U、第二行存V，第三行存U、第四行存V，等等，如此交错存储U、V色度。具体的YUV格式有各种各样的标准，这个到视频编解码库用到的时候再
    讲。<br>
    YUV压缩比例参考：<a href="https://www.cnblogs.com/ALittleDust/p/5935983.html" target="new">
      https://www.cnblogs.com/ALittleDust/p/5935983.html</a> <br>
    <br>
    <div class="os2">1.2.2 图像</div>
    <br>
    我们眼睛看到的物体光线全都是空间上连续的，而计算机只能处理离散数值。通过摄像头或相机等器件，将景物光像转为电信号，然后对电信号进行采样，从而形成计算机可
    以处 理的图像（Image）。看网络视频时都知道有标清、高清、超清等清晰度，这反应了图像的采样精度。图像由许许多多的像素点组成，每个像素点都是 RGB
    颜色空间（或其他颜色空间）的采样数值。除了摄像头、相机等能产生图像，计算机里的画图软件也可以产生图像，不过计算机绘制的图像通常称之为图形，比如 Maya
    图形设计。<br>
    图像的像素点是二维结构，一般横轴为 X 轴，竖轴从上到下是 Y 轴，如下图所示：<br>
    <center><img src="images/ch01/ch01-02-04.jpg"></center>
    图像横向范围是宽度，竖向范围是高度，每个像素点可以用 RGB 颜色空间数值表示，RGB每个颜色分量可以用不同比特位数来表示，就是颜色深度。最常用的是
    RGB24，即 8bit 红色分量、8bit 绿色分量、8bit 蓝色分量。另外也有 8 bit颜色深度，即只能显示 256 种彩色；16 bit
    颜色深度就只能显示 65,536 种颜色；24 bit 可以显示16,777,216 种颜色，就是真彩色；还有用 32 bit表示像素点的，除了 RGB
    三种分量，还有透明度分量 8bit，透明度分量通常称为 Alpha 通道。<br>
    <br>
    图像存储占用的空间是非常大的，比如 1080p（1920*1080）尺寸真彩色图片，原始图像占用空间就是<br>
    1920*1080*24&nbsp; = 49 766 400 bits = 6 220 800 Bytes<br>
    一张图片就占用了 6MB 多的空间，用网络传输是非常耗费带宽的，50Mbps 宽带每秒只能传一张未压缩的 1080p
    真彩色图片。因此为了节省存储空间和带宽，研究图像压缩算法就是科学家们必然要做的事。<br>
    我们在互联网常看到的 jpg、png、gif 图片都是经过压缩编码的，图像压缩编码是视频压缩编码的基础，比如 MJPEG 视频格式就是一张张的 jpg
    图像拼出来的。具体的图像压缩编码算法我们这里不讲，Qt 开发库针对常用的图片格式都能进行读写并转化为 RGB24、RGB32
    图像，进行软件开发时不太需要关注压缩编码算法原理。如果读者想研究压缩编码本身，可以购买图像处理的书籍学习。<br>
    <br>
    <div class="os2">1.2.3 视频和视频编码</div>
    <br>
    视频（Video）简单来说，就是一堆图像在时间轴上串起来形成的集合。通常视频里每张图像尺寸都是一样的，视频图像的尺寸也称为视频分辨率，比如常见视频分辨率
    如下：<br>
    480p ：640*480，俗称 DVD 画质或标清画质；<br>
    720p ：1280*720，俗称高清；<br>
    1080p ：1920*1080，俗称超清；<br>
    2K分辨率：2560*1440，国内数字影院放映机主要采用这种分辨率；<br>
    4K分辨率：4096*2160，这是分辨率的发展趋势。<br>
    <br>
    视频里的每张图像称为 1 帧（Frame），每秒的图像帧数称为帧率（Frame rate），帧率单位是 fps（Frames Per Second）。<br>
    <br>
    对于 1080p 视频，如果每秒 30 帧，那么每秒未压缩的原始数据量为：<br>
    1920*1080*24 * 30 = 1 492 992 000 bits = 186 624 000 Bytes<br>
    这个原始数据量是非常夸张的，如果直接用网络传输，千兆宽带都不够用。视频分辨率越高，占用空间和带宽越巨大，对视频压缩编码的需求也就越高。<br>
    <br>
    常用的视频压缩编码有 XVID（DIVX）、H.264/H.265、VP8/VP9、Theora 等，谷歌倡导的 VP8/VP9
    是开源免费的编码格式；Theora 是 Xiph.Org 基金会研发管理的，也是开源免费的。本教程主要讲 Theora 开源库的使用。<br>
    <br>
    <div class="os2">1.2.4 视频文件格式</div>
    <br>
    视频文件格式和编码算法是两个概念，一般音视频相关的开发库里，将编解码器统称为 Codec， 单独的编码器称为 Encoder，单独的解码器称为
    Decoder。 音视频文件是对音频流、视频流的封装，各种音视频文件统称为 Container（容器）， 将音视频流封装为文件的过程叫
    Muxing（封装），从文件中分离各个音频或视频流叫 Demuxing（解封） 。<br>
    原始音频流、视频流经过处理变成文件的过程如下图所示：<br>
    <center><img src="images/ch01/ch01-02-05.jpg"></center>
    视频播放器所做的工作就是上图的逆过程，将从视频文件中分离出音频和视频编码数据，然后分别进行解码，得到原始的PCM、RGB或YUV数据流，然后推送到声卡设
    备和显示设备播放出来。<br>
    <br>
    早期标清视频流行时，MP4或AVI文件中的视频通常采用 XVID 视频编码和 MP3 音频编码；目前流行的高清视频文件 MP4或MKV 中，通常采用
    H.264 视频编码和 AAC 音频编码。这些编码算法和封装格式通常都有专利保护，如果商业产品使用它们时没交专利授权费，那么会面临专利诉讼。<br>
    <br>
    音视频编解码软件 K-Lite Mega Codec Pack 安装后带有 MediaInfo 工具，可以很方便地查看音视频文件中的编码器信息：<br>
    <center><img src="images/ch01/ch01-02-06.jpg"></center>
    MediaInfo 显示了三部分信息，上图是第一部分通用信息，主要是指封装容器（文件格式）信息，Matroska 就是 MKV 文件封装格式，文件大小
    223MB，时长 43 分 33 秒，压缩后的平均数据速率 715 kb/s ，文件封装库采用的 libebml 和 libmatroska （由
    Matroska 组织开发和维护的开源文件封装库）。<br>
    <br>
    <center><img src="images/ch01/ch01-02-07.jpg"></center>
    第二部分显示了视频流信息，ID：1 是流编号， AVC 就是指 H.264 视频压缩编码，ITU-T 称该编码标准为 H.264，而 ISO/IEC
    称之为 MPEG-4 高级视频编码（Advanced Video Codec， AVC）。视频流的分辨率为 720*404，压缩后的平均数据速率 605
    kb/s，帧率 23.976 fps，压缩前的原始流是 YUV 4:2:0 ，压缩后视频数据大小 192 MB，使用的编码库是 x264 （由
    VideoLAN 组织开发的开源编码库）。注意虽然 x264 开发库是开源免费的，但是 H.264 编码技术是有专利授权的，如果在商业产品使用了
    H.264 技术就得交专利费。 <span style="color: blue"><b>商业产品不管用什么代码库，只要用了 H.264
        这项技术就得交专利费。</b></span> <br>
    <br>
    <br>
    <center><img src="images/ch01/ch01-02-08.jpg"></center>
    第三部分显示了音频流信息，ID：2 是流编号，AAC 就是高级音频编码，音频压缩后平均数据速率 96 kb/s ，2 声道数据，原始音频采样率是 48
    kHz，压缩后的音频数据大小为 29.9 MB。这里显示的音频帧率比较特殊，跟编码器有关，AAC 编码器每次输入 1024 个采样点，每秒 48000
    个采样点，那么每秒钟输入的分片数目是 48000 / 1024 = 46.875 ，这里的音频帧率其实是平均每秒输入到编码器的分片数。 <span style="color: blue"><b>和
        H.264 一样，商业产品不管使用什么代码库，只要用了 AAC 这项技术就得交专利费。</b></span><br>
    上面示范的视频文件信息里，只有 MKV 封装格式是开源免费的，而内部的 H.264 和 AAC 编码统统是要收专利费的，然而离开 H.264 视频 和
    AAC 音频，MKV 就是个空壳子。专利费是绝大多数商业产品绕不开的大山。要想实现真正的自由和免费，那么最好的办法是使用 Xiph.org
    基金会的音视频编码库。我们下一节专门介绍 Xiph.org 基金会。<br>
    <br>
    <br>
    <br>
    <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
      <tbody>
        <tr>
          <td style="width: 40%;">
            <div style="text-align: center;"><a href="ch01-01.htm"><img class="pic"
                  style="width: 32px; height: 32px;" alt="prev" src="images/pics/prev.png"></a></div>
          </td>
          <td style="width: 20%;">
            <div style="text-align: center;"><a href="contents.htm"><img class="pic"
                  style="width: 32px; height: 32px;" alt="contents" src="images/pics/contents.png"></a></div>
          </td>
          <td style="width: 40%;">
            <div style="text-align: center;"><a href="ch01-03.htm"><img class="pic"
                  style="width: 32px; height: 32px;" alt="next" src="images/pics/next.png"></a></div>
          </td>
        </tr>
      </tbody>
    </table>
  </body>
</html>
